home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / libnet / libnet-1.0-headers.h < prev    next >
C/C++ Source or Header  |  2005-10-19  |  16KB  |  526 lines

  1. /*
  2.  *  $Id: libnet-headers.h,v 1.1.1.1 2000/05/25 00:28:49 route Exp $
  3.  *
  4.  *  libnet-headers.h - Network routine library headers header file
  5.  *
  6.  *  Copyright (c) 1998 - 2001 Mike D. Schiffman <mike@infonexus.com>
  7.  *  All rights reserved.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  * 1. Redistributions of source code must retain the above copyright
  13.  *    notice, this list of conditions and the following disclaimer.
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in the
  16.  *    documentation and/or other materials provided with the distribution.
  17.  *
  18.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  19.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  20.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  21.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  22.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  23.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  24.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  25.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  26.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  27.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  28.  * SUCH DAMAGE.
  29.  *
  30.  */
  31.  
  32. #ifndef __LIBNET_HEADERS_H
  33. #define __LIBNET_HEADERS_H
  34.  
  35. /* 
  36.  *  Standard (IPv4) header sizes in bytes.
  37.  */
  38.  
  39. #define LIBNET_ARP_H           0x1c    /* ARP header:          28 bytes */
  40. #define LIBNET_DNS_H           0xc     /* DNS header base:     12 bytes */
  41. #define LIBNET_ETH_H           0xe     /* Etherner header:     14 bytes */
  42. #define LIBNET_ICMP_H          0x4     /* ICMP header base:     4 bytes */
  43. #define LIBNET_ICMP_ECHO_H     0x8     /* ICMP_ECHO header:     8 bytes */
  44. #define LIBNET_ICMP_MASK_H     0xc     /* ICMP_MASK header:    12 bytes */
  45. #define LIBNET_ICMP_UNREACH_H  0x8     /* ICMP_UNREACH header:  8 bytes */
  46. #define LIBNET_ICMP_TIMXCEED_H 0x8     /* ICMP_TIMXCEED header: 8 bytes */
  47. #define LIBNET_ICMP_REDIRECT_H 0x8     /* ICMP_REDIRECT header: 8 bytes */
  48. #define LIBNET_ICMP_TS_H       0x14    /* ICMP_TIMESTAMP headr:20 bytes */
  49. #define LIBNET_IGMP_H          0x8     /* IGMP header:          8 bytes */
  50. #define LIBNET_IP_H            0x14    /* IP header:           20 bytes */
  51. /* See libnet-ospf.h for OSPF related header sizes */
  52. #define LIBNET_RIP_H           0x18    /* RIP header base:     24 bytes */
  53. #define LIBNET_TCP_H           0x14    /* TCP header:          20 bytes */
  54. #define LIBNET_UDP_H           0x8     /* UDP header:           8 bytes */
  55. #define LIBNET_VRRP_H          0x8     /* VRRP header:          8 bytes */
  56.  
  57. /*
  58.  *  Concession to legacy naming scheme.
  59.  */
  60. #define ARP_H           LIBNET_ARP_H
  61. #define DNS_H           LIBNET_DNS_H
  62. #define ETH_H           LIBNET_ETH_H
  63. #define ICMP_H          LIBNET_ICMP_H
  64. #define ICMP_ECHO_H     LIBNET_ICMP_ECHO_H
  65. #define ICMP_MASK_H     LIBNET_ICMP_MASK_H
  66. #define ICMP_UNREACH_H  LIBNET_ICMP_UNREACH_H
  67. #define ICMP_TIMXCEED_H LIBNET_ICMP_TIMXCEED_H
  68. #define ICMP_REDIRECT_H LIBNET_ICMP_REDIRECT_H
  69. #define ICMP_TS_H       LIBNET_ICMP_TS_H
  70. #define IGMP_H          LIBNET_IGMP_H
  71. #define IP_H            LIBNET_IP_H
  72. #define RIP_H           LIBNET_RIP_H
  73. #define TCP_H           LIBNET_TCP_H
  74. #define UDP_H           LIBNET_UDP_H
  75.  
  76. /*
  77.  *  IPv4 packet header prototype.
  78.  */
  79. struct libnet_ip_hdr
  80. {
  81. #if (LIBNET_LIL_ENDIAN)
  82.     u_char ip_hl:4,         /* header length */
  83.             ip_v:4;         /* version */
  84. #endif
  85. #if (LIBNET_BIG_ENDIAN)
  86.     u_char ip_v:4,          /* version */
  87.             ip_hl:4;        /* header length */
  88. #endif
  89.     u_char ip_tos;          /* type of service */
  90.     u_short ip_len;         /* total length */
  91.     u_short ip_id;          /* identification */
  92.     u_short ip_off;
  93. #ifndef IP_RF
  94. #define IP_RF 0x8000        /* reserved fragment flag */
  95. #endif
  96. #ifndef IP_DF
  97. #define IP_DF 0x4000        /* dont fragment flag */
  98. #endif
  99. #ifndef IP_MF
  100. #define IP_MF 0x2000        /* more fragments flag */
  101. #endif 
  102. #ifndef IP_OFFMASK
  103. #define IP_OFFMASK 0x1fff   /* mask for fragmenting bits */
  104. #endif
  105.     u_char ip_ttl;          /* time to live */
  106.     u_char ip_p;            /* protocol */
  107.     u_short ip_sum;         /* checksum */
  108.     struct in_addr ip_src, ip_dst; /* source and dest address */
  109. };
  110.  
  111. /*
  112.  *  TCP packet header prototype.
  113.  */
  114. struct libnet_tcp_hdr
  115. {
  116.     u_short th_sport;       /* source port */
  117.     u_short th_dport;       /* destination port */
  118.     u_long th_seq;          /* sequence number */
  119.     u_long th_ack;          /* acknowledgement number */
  120. #if (LIBNET_LIL_ENDIAN)
  121.     u_char th_x2:4,         /* (unused) */
  122.            th_off:4;        /* data offset */
  123. #endif
  124. #if (LIBNET_BIG_ENDIAN)
  125.     u_char th_off:4,        /* data offset */
  126.            th_x2:4;         /* (unused) */
  127. #endif
  128.     u_char  th_flags;       /* control flags */
  129. #ifndef TH_FIN
  130. #define TH_FIN    0x01
  131. #endif
  132. #ifndef TH_SYN
  133. #define TH_SYN    0x02
  134. #endif
  135. #ifndef TH_RST
  136. #define TH_RST    0x04
  137. #endif
  138. #ifndef TH_PUSH
  139. #define TH_PUSH   0x08
  140. #endif
  141. #ifndef TH_ACK
  142. #define TH_ACK    0x10
  143. #endif
  144. #ifndef TH_URG
  145. #define TH_URG    0x20
  146. #endif
  147.     u_short th_win;         /* window */
  148.     u_short th_sum;         /* checksum */
  149.     u_short th_urp;         /* urgent pointer */
  150. };
  151.  
  152.  
  153. /*
  154.  *  UDP packet header prototype.
  155.  */
  156. struct libnet_udp_hdr
  157. {
  158.     u_short uh_sport;   /* soure port */
  159.     u_short uh_dport;   /* destination port */
  160.     u_short uh_ulen;    /* length */
  161.     u_short uh_sum;     /* checksum */
  162. };
  163.  
  164.  
  165. /*
  166.  *  ICMP packet header prototype.
  167.  */
  168. struct libnet_icmp_hdr
  169. {
  170.     u_char icmp_type;
  171. /*
  172.  *  ICMP types.
  173.  */
  174. #ifndef     ICMP_ECHOREPLY
  175. #define     ICMP_ECHOREPLY                  0
  176. #endif
  177. #ifndef     ICMP_UNREACH
  178. #define     ICMP_UNREACH                    3
  179. #endif
  180. #ifndef     ICMP_SOURCEQUENCH
  181. #define     ICMP_SOURCEQUENCH               4
  182. #endif
  183. #ifndef     ICMP_REDIRECT
  184. #define     ICMP_REDIRECT                   5
  185. #endif
  186. #ifndef     ICMP_ECHO
  187. #define     ICMP_ECHO                       8
  188. #endif
  189. #ifndef     ICMP_ROUTERADVERT
  190. #define     ICMP_ROUTERADVERT               9
  191. #endif
  192. #ifndef     ICMP_ROUTERSOLICIT
  193. #define     ICMP_ROUTERSOLICIT              10
  194. #endif
  195. #ifndef     ICMP_TIMXCEED
  196. #define     ICMP_TIMXCEED                   11
  197. #endif
  198. #ifndef     ICMP_PARAMPROB
  199. #define     ICMP_PARAMPROB                  12
  200. #endif
  201. #ifndef     ICMP_TSTAMP
  202. #define     ICMP_TSTAMP                     13
  203. #endif
  204. #ifndef     ICMP_TSTAMPREPLY
  205. #define     ICMP_TSTAMPREPLY                14
  206. #endif
  207. #ifndef     ICMP_IREQ
  208. #define     ICMP_IREQ                       15
  209. #endif
  210. #ifndef     ICMP_IREQREPLY
  211. #define     ICMP_IREQREPLY                  16
  212. #endif
  213. #ifndef     ICMP_MASKREQ
  214. #define     ICMP_MASKREQ                    17
  215. #endif
  216. #ifndef     ICMP_MASKREPLY
  217. #define     ICMP_MASKREPLY                  18
  218. #endif
  219.     u_char icmp_code;
  220. /*
  221.  *  ICMP codes.
  222.  */
  223. #ifndef     ICMP_UNREACH_NET
  224. #define     ICMP_UNREACH_NET                0
  225. #endif
  226. #ifndef     ICMP_UNREACH_HOST
  227. #define     ICMP_UNREACH_HOST               1
  228. #endif
  229. #ifndef     ICMP_UNREACH_PROTOCOL
  230. #define     ICMP_UNREACH_PROTOCOL           2
  231. #endif
  232. #ifndef     ICMP_UNREACH_PORT
  233. #define     ICMP_UNREACH_PORT               3
  234. #endif
  235. #ifndef     ICMP_UNREACH_NEEDFRAG
  236. #define     ICMP_UNREACH_NEEDFRAG           4
  237. #endif
  238. #ifndef     ICMP_UNREACH_SRCFAIL
  239. #define     ICMP_UNREACH_SRCFAIL            5
  240. #endif
  241. #ifndef     ICMP_UNREACH_NET_UNKNOWN
  242. #define     ICMP_UNREACH_NET_UNKNOWN        6
  243. #endif
  244. #ifndef     ICMP_UNREACH_HOST_UNKNOWN
  245. #define     ICMP_UNREACH_HOST_UNKNOWN       7
  246. #endif
  247. #ifndef     ICMP_UNREACH_ISOLATED
  248. #define     ICMP_UNREACH_ISOLATED           8
  249. #endif
  250. #ifndef     ICMP_UNREACH_NET_PROHIB
  251. #define     ICMP_UNREACH_NET_PROHIB         9
  252. #endif
  253. #ifndef     ICMP_UNREACH_HOST_PROHIB
  254. #define     ICMP_UNREACH_HOST_PROHIB        10
  255. #endif
  256. #ifndef     ICMP_UNREACH_TOSNET
  257. #define     ICMP_UNREACH_TOSNET             11
  258. #endif
  259. #ifndef     ICMP_UNREACH_TOSHOST
  260. #define     ICMP_UNREACH_TOSHOST            12
  261. #endif
  262. #ifndef     ICMP_UNREACH_FILTER_PROHIB
  263. #define     ICMP_UNREACH_FILTER_PROHIB      13
  264. #endif
  265. #ifndef     ICMP_UNREACH_HOST_PRECEDENCE
  266. #define     ICMP_UNREACH_HOST_PRECEDENCE    14
  267. #endif
  268. #ifndef     ICMP_UNREACH_PRECEDENCE_CUTOFF
  269. #define     ICMP_UNREACH_PRECEDENCE_CUTOFF  15
  270. #endif
  271. #ifndef     ICMP_REDIRECT_NET
  272. #define     ICMP_REDIRECT_NET               0
  273. #endif
  274. #ifndef     ICMP_REDIRECT_HOST
  275. #define     ICMP_REDIRECT_HOST              1
  276. #endif
  277. #ifndef     ICMP_REDIRECT_TOSNET
  278. #define     ICMP_REDIRECT_TOSNET            2
  279. #endif
  280. #ifndef     ICMP_REDIRECT_TOSHOST
  281. #define     ICMP_REDIRECT_TOSHOST           3
  282. #endif
  283. #ifndef     ICMP_TIMXCEED_INTRANS
  284. #define     ICMP_TIMXCEED_INTRANS           0
  285. #endif
  286. #ifndef     ICMP_TIMXCEED_REASS
  287. #define     ICMP_TIMXCEED_REASS             1
  288. #endif
  289. #ifndef     ICMP_PARAMPROB_OPTABSENT
  290. #define     ICMP_PARAMPROB_OPTABSENT        1
  291. #endif
  292.  
  293.     u_short icmp_sum;
  294.  
  295.     union
  296.     {
  297.         struct
  298.         {
  299.             u_short id;
  300.             u_short seq;
  301.         }echo;
  302.  
  303. #undef icmp_id
  304. #undef icmp_seq
  305. #define icmp_id     hun.echo.id
  306. #define icmp_seq    hun.echo.seq
  307.  
  308.         u_long gateway;
  309.         struct
  310.         {
  311.             u_short pad;
  312.             u_short mtu;
  313.         }frag;
  314.     }hun;
  315.     union
  316.     {
  317.         struct
  318.         {
  319.             n_time its_otime;
  320.             n_time its_rtime;
  321.             n_time its_ttime;
  322.         }ts;
  323.         struct
  324.         {
  325.             struct ip idi_ip;
  326.             /* options and then 64 bits of data */
  327.         }ip;
  328.         u_long mask;
  329.         char data[1];
  330.  
  331. #undef icmp_mask
  332. #define icmp_mask    dun.mask
  333. #undef icmp_data
  334. #define icmp_data    dun.data
  335.  
  336. #undef icmp_otime
  337. #define icmp_otime   dun.ts.its_otime
  338. #undef icmp_rtime
  339. #define icmp_rtime   dun.ts.its_rtime
  340. #undef icmp_ttime
  341. #define icmp_ttime   dun.ts.its_ttime
  342.     }dun;
  343. };
  344.  
  345.  
  346. /*
  347.  *  IGMP header.
  348.  */
  349. struct libnet_igmp_hdr
  350. {
  351.     u_char igmp_type;
  352. #ifndef IGMP_MEMBERSHIP_QUERY
  353. #define IGMP_MEMBERSHIP_QUERY           0x11    /* membership query */
  354. #endif
  355. #ifndef IGMP_V1_MEMBERSHIP_REPORT
  356. #define IGMP_V1_MEMBERSHIP_REPORT       0x12    /* Ver. 1 membership report */
  357. #endif
  358. #ifndef IGMP_V2_MEMBERSHIP_REPORT
  359. #define IGMP_V2_MEMBERSHIP_REPORT       0x16    /* Ver. 2 membership report */
  360. #endif
  361. #ifndef IGMP_LEAVE_GROUP
  362. #define IGMP_LEAVE_GROUP                0x17    /* Leave-group message */
  363. #endif
  364.     u_char igmp_code;
  365.     u_short igmp_sum;
  366.     struct in_addr igmp_group;
  367. };
  368.  
  369.  
  370. /* 
  371.  *  Ethernet packet header prototype.  Too many O/S's define this differently.
  372.  *  Easy enough to solve that and define it here.
  373.  */
  374. struct libnet_ethernet_hdr
  375. {
  376. #ifndef ETHER_ADDR_LEN
  377. #define ETHER_ADDR_LEN 6
  378. #endif
  379.     u_char  ether_dhost[ETHER_ADDR_LEN];    /* destination ethernet address */
  380.     u_char  ether_shost[ETHER_ADDR_LEN];    /* source ethernet address */
  381.     u_short ether_type;                     /* packet type ID */
  382. };
  383.  
  384. #define ETHERTYPE_PUP           0x0200  /* PUP protocol */
  385. #define ETHERTYPE_IP            0x0800  /* IP protocol */
  386. #define ETHERTYPE_ARP           0x0806  /* Addr. resolution protocol */
  387. #define ETHERTYPE_REVARP        0x8035  /* reverse Addr. resolution protocol */
  388. #define ETHERTYPE_VLAN          0x8100  /* IEEE 802.1Q VLAN tagging */
  389. #define ETHERTYPE_LOOPBACK      0x9000  /* used to test interfaces */
  390.  
  391. #if (!__GLIBC__)
  392. struct ether_addr
  393. {
  394.     u_char  ether_addr_octet[6];
  395. };
  396. #endif
  397.  
  398. /* 
  399.  *  ARP packet header prototype.  Too many O/S's define this differently.
  400.  *  Easy enough to solve that and define it here.
  401.  */
  402. struct libnet_arp_hdr
  403. {
  404.     u_short ar_hrd;                         /* format of hardware address */
  405. #define ARPHRD_ETHER     1                  /* ethernet hardware format */
  406.     u_short ar_pro;                         /* format of protocol address */
  407.     u_char  ar_hln;                         /* length of hardware address */
  408.     u_char  ar_pln;                         /* length of protocol addres */
  409.     u_short ar_op;                          /* operation type */
  410. #define ARPOP_REQUEST    1                  /* req to resolve address */
  411. #define ARPOP_REPLY      2                  /* resp to previous request */
  412. #define ARPOP_REVREQUEST 3                  /* req protocol address given hardware */
  413. #define ARPOP_REVREPLY   4                  /* resp giving protocol address */
  414. #define ARPOP_INVREQUEST 8                  /* req to identify peer */
  415. #define ARPOP_INVREPLY   9                  /* resp identifying peer */
  416.  
  417.     /*
  418.      *  These should implementation defined but I've hardcoded eth/IP.
  419.      */
  420.     u_char ar_sha[6];                         /* sender hardware address */
  421.     u_char ar_spa[4];                         /* sender protocol address */
  422.     u_char ar_tha[6];                         /* target hardware address */
  423.     u_char ar_tpa[4];                         /* target protocol address */
  424. };
  425.  
  426.  
  427. /*
  428.  *  Base DNS header.
  429.  */
  430. struct libnet_dns_hdr
  431. {
  432.     u_short id;             /* DNS packet ID */
  433.     u_short flags;          /* DNS flags */
  434.     u_short num_q;          /* Number of questions */
  435.     u_short num_answ_rr;    /* Number of answer resource records */
  436.     u_short num_auth_rr;    /* Number of authority resource records */
  437.     u_short num_addi_rr;    /* Number of additional resource records */
  438. };
  439.  
  440.  
  441. /*
  442.  *  Base RIP (routing information protocol) header.
  443.  */
  444. struct libnet_rip_hdr
  445. {
  446.     u_char cmd;             /* RIP command */
  447. #define RIPCMD_REQUEST      1   /* want info */
  448. #define RIPCMD_RESPONSE     2   /* responding to request */
  449. #define RIPCMD_TRACEON      3   /* turn tracing on */
  450. #define RIPCMD_TRACEOFF     4   /* turn it off */
  451. #define RIPCMD_POLL         5   /* like request, but anyone answers */
  452. #define RIPCMD_POLLENTRY    6   /* like poll, but for entire entry */
  453. #define RIPCMD_MAX          7
  454.     u_char ver;             /* RIP version */
  455. #define RIPVER_0            0
  456. #define RIPVER_1            1
  457. #define RIPVER_2            2
  458.     u_short rd;             /* Zero (v1) or Routing Domain (v2) */
  459.     u_short af;             /* Address family */
  460.     u_short rt;             /* Zero (v1) or Route Tag (v2) */
  461.     u_long addr;            /* IP address */
  462.     u_long mask;            /* Zero (v1) or Subnet Mask (v2) */
  463.     u_long next_hop;        /* Zero (v1) or Next hop IP address (v2) */
  464.     u_long metric;          /* Metric */
  465. };
  466.  
  467. /*
  468.  *  VRRP packet header prototype.
  469.  */
  470. #ifndef IPPROTO_VRRP
  471. #define IPPROTO_VRRP 112
  472. #endif
  473. struct libnet_vrrp_hdr
  474. {
  475. #if (LIBNET_LIL_ENDIAN)
  476.     u_char vrrp_v:4,        /* protocol version */
  477.            vrrp_t:4;        /* packet type */
  478. #endif
  479. #if (LIBNET_BIG_ENDIAN)
  480.     u_char vrrp_t:4,        /* packet type */
  481.            vrrp_v:4;        /* protocol version */
  482. #endif
  483. #define LIBNET_VRRP_TYPE_ADVERT 0x1
  484.     u_char vrrp_vrouter_id; /* virtual router id */
  485.     u_char vrrp_priority;   /* priority */
  486.     u_char vrrp_ip_count;   /* number of IP addresses */
  487.     u_char vrrp_auth_type;  /* authorization type */
  488. #define LIBNET_VRRP_AUTH_NONE   0x1
  489. #define LIBNET_VRRP_AUTH_PASSWD 0x2
  490. #define LIBNET_VRRP_AUTH_IPAH   0x3
  491.     u_char vrrp_advert_int; /* advertisement interval */
  492.     u_short vrrp_sum;      /* checksum */
  493. };
  494.  
  495. #if 0
  496. struct libnet_snmp_hdr
  497. {
  498.     /* ASN.1 BER support first */
  499. };
  500. #endif
  501.  
  502.  
  503. /*
  504.  *  TCP options structure.
  505.  */
  506. struct tcpoption
  507. {
  508.     u_char tcpopt_list[MAX_IPOPTLEN];
  509. };
  510.  
  511.  
  512. #if (__linux__)
  513. /*
  514.  *  Linux has a radically different IP options structure from BSD.
  515.  */
  516. struct ipoption
  517. {
  518.     struct  in_addr ipopt_dst;          /* first-hop dst if source routed */
  519.     char ipopt_list[MAX_IPOPTLEN];      /* options proper */
  520. };
  521. #endif
  522.  
  523. #endif  /* __LIBNET_HEADERS_H */
  524.  
  525. /* EOF */
  526.